/*
给定两个单链表的头节点headA和headB，请找出并返回两个单链表相交的起始节点。
如果两个链表没有交点，返回null 。
*/
node* findCrosspoint(node*h1,node*h2){
    /*
    最开始的思路：任取一个链表头，和另一个链表的所有节点比较，
    如果未找到相交节点则取此节点的下一个节点继续上述过程，时间复杂度为O(n^2)。
    这个思路尽管正确，但忽略了一个事实，长链表超出短链表的部分，这些节点不会是相交节点。
    相交节点只会出现在长链表的短链表长度那部分中。
    */
    node*result=0;
    node*temp=h1;
    int length1=0;
    while(temp!=0){
        temp=temp->next;
        length1++;
    }
    int length2=0;
    temp=h2;
    while(temp!=0){
        temp=temp->next;
        length2++;
    } 
    node*ptr1=h1;
    node*ptr2=h2;

    int n=length1-length2;
    //移动指针，使长链表指针指向短链表开始处
    if(n<=0){
        n=0-n;
        while(n>0){
            ptr2=ptr2->next;
            n--;
        }
    }
    else{
        while(n>0){
            ptr1=ptr1->next;
            n--;
        }
    }

    while(ptr1!=0){
        if(ptr1==ptr2){
            result=ptr1;
            break;
        }
        ptr1=ptr1->next;
        ptr2=ptr2->next;
    }
    return result;
}